package tpi.gui.pages.mapamundi

import dominio.investigacion.Mapamundi
import dominio.ubicaciones.Pais
import org.apache.wicket.markup.html.WebPage
import org.apache.wicket.markup.html.basic.Label
import org.apache.wicket.markup.html.form.Form
import org.apache.wicket.model.CompoundPropertyModel
import org.uqbar.wicket.xtend.WicketExtensionFactoryMethods
import org.uqbar.wicket.xtend.XButton
import org.uqbar.wicket.xtend.XListView
import tpi.gui.pages.InicioPage
import tpi.gui.pages.pais.PaisPage

class MapamundiPage extends WebPage {
	
	extension WicketExtensionFactoryMethods = new WicketExtensionFactoryMethods
	private final Mapamundi mapamundi
	private final InicioPage mainPage
	
	new(Mapamundi mapamundi, InicioPage mainPage) {
		this.mapamundi = mapamundi
		this.mainPage = mainPage
		val Form<Mapamundi> form = new Form<Mapamundi>("mapamundiForm", new CompoundPropertyModel(this.mapamundi))
		val listView = new XListView("paises")
		listView.populateItem = [item |
			item.model = item.modelObject.asCompoundModel
			item.addChild(new Label("nombre"))			
			item.addChild(new XButton("eliminar").onClick = [| eliminarPais(item.modelObject)])
			item.addChild(new XButton("editar").onClick = [| edicionPais(item.modelObject)])
		]
		form.addChild(listView)
		form.addChild(new XButton("nuevo").onClick = [| nuevoPais()])
		form.addChild(new XButton("volver").onClick = [| volver()])
		addChild(form)	
	}
	
	def edicionPais(Pais pais) {
		val original = pais
		val copia = pais.copiaPais
		responsePage = new PaisPage(original, copia, this)
	}
	
	def nuevoPais() {
		responsePage = new PaisPage(null, this.mapamundi.nuevoPais, this)
	}
	
	def volver() {
		responsePage = this.mainPage
	}
	
	def eliminarPais(Pais pais) {
		mapamundi.borrarPais(pais)
	}
	
	def copiaPais(Pais pais) {
		mapamundi.nuevoPais => [
			nombre = pais.nombre
			caracteristicas += (pais.caracteristicas)
			conexiones += pais.conexiones
			lugares += pais.lugares
		]
	}
	
}